package config

import (
	"gopkg.in/yaml.v2"
	"io/ioutil"
	"os"
	"path/filepath"
)

var configFile = `./config.yml`
var C *Config

type Config struct {
	DefaultCron string `yaml:"default_cron"`
	MysConfig   []Mys  `yaml:"mys_config"`
}

type Mys struct {
	Cookie string `yaml:"cookie"`
	Cron   string `yaml:"cron"`
}

func InitConfig() {
	if !fileExists(configFile) {
		saveConfig()
	}
	readConfig()
}

func readConfig() {
	file, err := ioutil.ReadFile(configFile)
	if err != nil {
		panic(err)
	}
	if err = yaml.Unmarshal(file, &C); err != nil {
		panic(err)
	}
}

func parsePath(filename string) string {
	if fileExists(filename) {
		return filename
	}
	var err error
	ex, err := os.Executable()
	if err != nil {
		panic(err)
	}
	realPath, err := filepath.EvalSymlinks(ex)
	if err != nil {
		panic(err)
	}

	//	获取执行文件所在目录
	exPath := filepath.Dir(realPath)

	return filepath.Join(exPath, filename)
}

func fileExists(name string) bool {
	if _, err := os.Stat(name); err != nil {
		if os.IsNotExist(err) {
			return false
		}
	}
	return true
}

func saveConfig() {
	C = &Config{}
	C.DefaultCron = `0 0 8 * * *`
	C.MysConfig = []Mys{}
	C.MysConfig = append(C.MysConfig, Mys{
		Cookie: "cookie",
		Cron:   "",
	})

	b := []byte(`#cron格式参考 https://en.wikipedia.org/wiki/Cron  https://zh.wikipedia.org/wiki/Cron
#但是这里是6段，第一段为秒
default_cron: 0 0 8 * * *

#mys_config里面配置米游社自动签到，每段由cookie和cron组成，如果cron留空，则使用默认cron
#cookie请在电脑上登录米游社论坛（https://bbs.mihoyo.com/ys/），然后打开调试工具，刷新浏览器，然后将调试工具切换到网络标签，查看第一个请求的cookie字段的值，并复制到这里
#cookie的例子：_MHYUUID=xxxxxxxxx; mi18nLang=zh-cn; login_uid=xxxxx; login_ticket=xxxxxxx; account_id=xxxxx; cookie_token=xxxxx; ltoken=xxxx; ltuid=xxxxxx
mys_config:
- cookie: cookie
  cron: ""`)

	err := ioutil.WriteFile(configFile, b, os.ModeAppend)
	if err != nil {
		panic(err)
	}
}
